const express = require('express');
const app = express();

// 配置解析表单数据的中间件
app.use(express.urlencoded({ extended:false}));
app.use(express.json());

// 配置跨域
const cors = require('cors');
app.use(cors())

// 挂载路由之前，封装统一报错
app.use((req,res,next) => {
    console.log('路由');
    // code = 200 是成功，默认失败，方便处理
    res.cc = (err,code = 0) => res.send({ code, message: err instanceof Error ? err.message : err})
    next()
})

// 配置解析 token
const { expressjwt } = require('express-jwt');
// 开启校验后，发请求时，记得在请求头加token！！
app.use(expressjwt({ secret: 'tiancai', algorithms: ['HS256'] }).unless({ path: [/^\/api/] }))


// 配置路由，不能移到前面！！
const router = require('./router/user');
app.use('/api',router)
// 配置路由，my代表都要登录
const userInfo = require('./router/userInfo');
app.use('/my',userInfo)
// 配置路由，my代表都要登录
const articleCate = require('./router/articleCate');
app.use('/my',articleCate)
// 配置路由，my代表都要登录
const article = require('./router/article');
app.use('/my',article)

// 封装全局错误，注意我是最后才使用！！
app.use((err,req,res,next) =>{
    // console.log('err -----> ', err.message);
    if (err.name === "UnauthorizedError") {
        return res.cc('身份认证失败')
    }
    res.cc(err)
})

// 连接数据库
const db = require('./db')
// 测试连接
db.query("select 1",(err, res) => {
    if (err) return console.log(err.message);
    console.log('数据库连接成功',res);
})

app.listen(8088,() => {
  console.log('8088 服务启动成功');
})
